home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / gus / vts139b.zip / PLAYMOD.ASM < prev    next >
Assembly Source File  |  1993-12-18  |  12KB  |  509 lines

  1.                 IDEAL
  2.                 MODEL  COMPACT
  3.                 LOCALS @@
  4.                 JUMPS
  5.  
  6.                 P386
  7.  
  8. MACRO SetBorder r,g,b
  9. MASM
  10. COMMENT %
  11.         PUSH    AX DX
  12.  
  13.         MOV     DX,3C8h
  14.         XOR     AL,AL
  15.         OUT     DX,AL
  16.         INC     DX
  17.       IFDIF <&r>,<0>
  18.         MOV     AL,&r
  19.       ENDIF
  20.         OUT     DX,AL
  21.       IFDIF <&g>,<&r>
  22.         MOV     AL,&g
  23.       ENDIF
  24.         OUT     DX,AL
  25.       IFDIF <&b>,<&g>
  26.         MOV     AL,&b
  27.       ENDIF
  28.         OUT     DX,AL
  29.  
  30.         POP     DX AX
  31. %
  32. IDEAL
  33. ENDM
  34.  
  35.  
  36.  
  37. MACRO DefLabel Name, Num
  38. Name&Num:
  39. ENDM
  40.  
  41.  
  42.  
  43.                 CODESEG
  44.  
  45.  
  46.  
  47.  
  48. ;
  49. ;  DS:SI.BP = Src  pos.     -> DS:SI.BP
  50. ;  ES:DI    = Dest pos.     -> ES:DI
  51. ;  CH.DX    = Src Incr.     -> DX:mem
  52. ;  CL       = Volume.       -> CL
  53. ;  BX       = Dest Incr.    -> BX
  54. ;  AX       = Loop Len.     -> CH*8
  55. ;
  56.  
  57. DumpRaw:
  58. ;SetBorder 64, 64, 64
  59.  
  60.                 MOV     [WORD PTR CS:dl_data_0-2],DX
  61.                 MOV     [WORD PTR CS:dl_data_1-2],DX
  62.                 MOV     [WORD PTR CS:dl_data_2-2],DX
  63.                 MOV     [WORD PTR CS:dl_data_3-2],DX
  64.                 MOV     [WORD PTR CS:dl_data_4-2],DX
  65.                 MOV     [WORD PTR CS:dl_data_5-2],DX
  66.                 MOV     [WORD PTR CS:dl_data_6-2],DX
  67.                 MOV     [WORD PTR CS:dl_data_7-2],DX
  68.  
  69.                 MOV     DL,CH
  70.                 XOR     DH,DH
  71.  
  72.                 MOV     CH,AL
  73.                 ADD     AX,7
  74.                 SHR     AX,3
  75.                 XCHG    AL,CH
  76.                 AND     AL,7
  77.                 JZ      SHORT DumpLoop
  78.                 NEG     AL
  79.                 AND     AL,7
  80.                 MOV     AH,DumpLoopSize
  81.                 MUL     AH
  82.                 ADD     AX,OFFSET DumpLoop
  83.  
  84. ;                MOV     CX,1000
  85. ;                LOOP    $
  86.  
  87. ;SetBorder 0, 0, 0
  88. ;RET
  89.  
  90.                 JMP     AX
  91.  
  92. DumpLoop:
  93.  
  94. count = 0
  95.  
  96.         REPT 8
  97.  
  98.                 MOV     AL,[SI]
  99.                 IMUL    CL
  100.                 MOV     [WORD PTR ES:DI],AX
  101.                 ADD     DI,BX
  102.                 ADD     BP,4321h
  103.             DefLabel    dl_data_, %count
  104.                 ADC     SI,DX
  105.  
  106. count = count + 1
  107.  
  108.         ENDM
  109.  
  110. DumpLoopSize = ($ - DumpLoop) / 8
  111.  
  112.                 DEC     CH
  113.                 JNZ     SMALL DumpLoop
  114.  
  115.                 RETN
  116.  
  117.  
  118.  
  119.  
  120. ;
  121. ;  DS:SI.BP = Src  pos.     -> DS:SI.BP
  122. ;  ES:DI    = Dest pos.     -> ES:DI
  123. ;  CH.DX    = Src Incr.     -> DX:mem
  124. ;  CL       = Volume.       -> CL
  125. ;  BX       = Dest Incr.    -> BX
  126. ;  AX       = Loop Len.     -> CH*16
  127. ;
  128.  
  129. EmptyRaw:
  130.                 PUSH    AX
  131.                 SHR     CH,1
  132.                 RCR     DX,1
  133.                 SHR     CH,1
  134.                 RCR     DX,1
  135.                 SHR     CH,1
  136.                 RCR     DX,1
  137.                 SHR     CH,1
  138.                 RCR     DX,1
  139.                 MUL     DX
  140.                 SHL     AX,1
  141.                 RCL     DX,1
  142.                 SHL     AX,1
  143.                 RCL     DX,1
  144.                 SHL     AX,1
  145.                 RCL     DX,1
  146.                 SHL     AX,1
  147.                 RCL     DX,1
  148.                 ADD     BP,AX
  149.                 ADC     SI,DX
  150.  
  151.                 POP     AX
  152.  
  153.                 MOV     CH,AL
  154.                 ADD     AX,15
  155.                 SHR     AX,4
  156.                 XCHG    AL,CH
  157.                 AND     AL,15
  158.                 JZ      SHORT EmptyLoop
  159.                 NEG     AL
  160.                 AND     AL,15
  161.                 MOV     AH,EmptyLoopSize
  162.                 MUL     AH
  163.                 ADD     AX,OFFSET EmptyLoop
  164.  
  165.                 MOV     DX,AX
  166.  
  167.                 XOR     AX,AX
  168.                 JMP     DX
  169.  
  170. EmptyLoop:
  171.                 REPT 16
  172.                  MOV    [ES:DI],AX
  173.                  ADD    DI,BX
  174.                 ENDM
  175.  
  176. EmptyLoopSize = ($ - EmptyLoop) / 16
  177.  
  178.                 DEC     CH
  179.                 JNZ     SHORT EmptyLoop
  180.  
  181.                 RETN
  182.  
  183.  
  184.  
  185.  
  186. ; FUNCTION DumpInstrument(VAR {Pointer} Src; VAR {Pointer} Dest; Volume: BYTE;
  187. ;                         Step: WORD; SrcLimit, Max, ChanAdd: WORD) : WORD;
  188.  
  189. PUBLIC DumpInstrument
  190. PROC   DumpInstrument PASCAL FAR Src: DWORD, Dest: DWORD, Volume: BYTE, Step: WORD, SrcLimit: WORD, Max: WORD, ChanAdd: WORD
  191.  
  192.                 MOV     CH,[Volume]
  193.                 AND     CH,CH
  194.                 JZ      DumpEmptyIn
  195.  
  196.                 MOV     CX,[Step]
  197.                 AND     CX,CX
  198.                 JZ      DumpEmptyIn
  199. DumpInsIn:
  200.                 PUSH    SI
  201.                 PUSH    DI
  202.  
  203.                 LES     DI,[Src]
  204.  
  205.                 MOV     AX,[Step]
  206.                 AND     AX,AX
  207.                 JZ      SHORT @@long
  208.  
  209.                 MOV     DX,[Max]
  210.                 SHL     DX,4
  211.                 MUL     DX
  212.  
  213.                 ADD     AX,[ES:DI]
  214.                 ADC     DX,[ES:DI+2]
  215.                 JC      @@short
  216.                 CMP     DX,[SrcLimit]
  217.                 JNC     @@short
  218.  
  219. @@long:
  220.                 PUSH    DS
  221.                 PUSH    BP
  222.  
  223.                 LDS     SI,[ES:DI+2]
  224.                 MOV     AX,[ES:DI]
  225.                 PUSH    AX
  226.                 LES     DI,[Dest]
  227.                 LES     DI,[ES:DI]
  228.  
  229.                 MOV     CL,[Volume]
  230.                 MOV     DX,[Step]
  231.                 MOV     CH,DH
  232.                 SHR     CH,4
  233.                 SHL     DX,4
  234.                 MOV     AX,[Max]
  235.                 MOV     BX,[ChanAdd]
  236.  
  237. ;SetBorder 63, 0, 63
  238.  
  239.                 POP     BP
  240.                 CALL    DumpRaw
  241.  
  242. ;SetBorder 63, 32, 0
  243.  
  244.                 MOV     DX,BP
  245.  
  246.                 POP     BP
  247.                 POP     DS
  248.  
  249.                 LES     BX,[Src]
  250.                 MOV     [ES:BX],DX
  251.                 MOV     [ES:BX+2],SI
  252.  
  253.                 LES     BX,[Dest]
  254.                 MOV     [ES:BX],DI
  255.  
  256.                 XOR     AX,AX
  257.  
  258.                 POP     DI
  259.                 POP     SI
  260.                 RET
  261.  
  262.  
  263. @@short:
  264.                 MOV     DX,[SrcLimit]
  265.                 XOR     AX,AX
  266.                 SUB     AX,[ES:DI]
  267.                 SBB     DX,[ES:DI+2]
  268.                 JC      @@nomues
  269.  
  270.                 SHR     DX,1
  271.                 RCR     AX,1
  272.                 SHR     DX,1
  273.                 RCR     AX,1
  274.                 SHR     DX,1
  275.                 RCR     AX,1
  276.                 SHR     DX,1
  277.                 RCR     AX,1
  278.  
  279.                 DIV     [Step]
  280.                 AND     DX,DX
  281.                 JZ      SHORT @@cc
  282.                  INC    AX
  283. @@cc:
  284.                 AND     AX,AX
  285.                 JNZ     @@c6
  286.  
  287. @@nomues:
  288.                 MOV     AX,[Max]
  289.  
  290.                 POP     DI
  291.                 POP     SI
  292.                 RET
  293. @@c6:
  294.                 CMP     AX,[Max]
  295.                 JC      SHORT @@c5
  296.                  MOV    AX,[Max]
  297. @@c5:
  298.  
  299.                 PUSH    AX
  300.  
  301.                 PUSH    DS
  302.                 PUSH    BP
  303.  
  304.                 LDS     SI,[ES:DI+2]
  305.                 MOV     BX,[ES:DI]
  306.                 PUSH    BX
  307.                 LES     DI,[Dest]
  308.                 LES     DI,[ES:DI]
  309.  
  310.                 MOV     CL,[Volume]
  311.                 MOV     DX,[Step]
  312.                 MOV     CH,DH
  313.                 SHR     CH,4
  314.                 SHL     DX,4
  315.                 MOV     BX,[ChanAdd]
  316.  
  317.                 POP     BP
  318.  
  319. SetBorder 63, 63, 63
  320.  
  321.                 CALL    DumpRaw
  322.  
  323. SetBorder 0, 0, 0
  324.  
  325.                 MOV     DX,BP
  326.  
  327.                 POP     BP
  328.                 POP     DS
  329.  
  330.                 LES     BX,[Src]
  331.                 MOV     [ES:BX],DX
  332.                 MOV     [ES:BX+2],SI
  333.  
  334.                 LES     BX,[Dest]
  335.                 MOV     [ES:BX],DI
  336.  
  337.                 POP     CX
  338.  
  339.                 MOV     AX,[Max]
  340.                 SUB     AX,CX
  341.  
  342.                 POP     DI
  343.                 POP     SI
  344.                 RET
  345.  
  346. ENDP
  347.  
  348.  
  349.  
  350.  
  351. ; FUNCTION DumpEmpty(VAR {Pointer} Src; VAR {Pointer} Dest; Volume: BYTE;
  352. ;                    Step: WORD; SrcLimit, Max, ChanAdd: WORD) : WORD;
  353.  
  354. PUBLIC DumpEmpty
  355. PROC   DumpEmpty PASCAL FAR Src: DWORD, Dest: DWORD, Volume: BYTE, Step: WORD, SrcLimit: WORD, Max: WORD, ChanAdd: WORD
  356.  
  357. DumpEmptyIn:
  358.  
  359.                 PUSH    SI
  360.                 PUSH    DI
  361.  
  362.                 LES     DI,[Src]
  363.  
  364.                 MOV     AX,[Step]
  365.                 AND     AX,AX
  366.                 JZ      SHORT @@long
  367.  
  368.                 MOV     DX,[Max]
  369.                 SHL     DX,4
  370.                 MUL     DX
  371.  
  372.                 ADD     AX,[ES:DI]
  373.                 ADC     DX,[ES:DI+2]
  374.                 JC      @@short
  375.                 CMP     DX,[SrcLimit]
  376.                 JNC     @@short
  377.  
  378. @@long:
  379.                 PUSH    DS
  380.                 PUSH    BP
  381.  
  382.                 LDS     SI,[ES:DI+2]
  383.                 MOV     AX,[ES:DI]
  384.                 PUSH    AX
  385.                 LES     DI,[Dest]
  386.                 LES     DI,[ES:DI]
  387.  
  388.                 MOV     CL,[Volume]
  389.                 MOV     DX,[Step]
  390.                 MOV     CH,DH
  391.                 SHR     CH,4
  392.                 SHL     DX,4
  393.                 MOV     AX,[Max]
  394.                 MOV     BX,[ChanAdd]
  395.  
  396.                 POP     BP
  397.                 CALL    EmptyRaw
  398.  
  399. ;SetBorder 63, 32, 0
  400.  
  401.                 MOV     DX,BP
  402.  
  403.                 POP     BP
  404.                 POP     DS
  405.  
  406.                 LES     BX,[Src]
  407.                 MOV     [ES:BX],DX
  408.                 MOV     [ES:BX+2],SI
  409.  
  410.                 LES     BX,[Dest]
  411.                 MOV     [ES:BX],DI
  412.  
  413.                 XOR     AX,AX
  414.  
  415.                 POP     DI
  416.                 POP     SI
  417.                 RET
  418.  
  419.  
  420. @@short:
  421.                 MOV     DX,[SrcLimit]
  422.                 XOR     AX,AX
  423.                 SUB     AX,[ES:DI]
  424.                 SBB     DX,[ES:DI+2]
  425.                 JC      @@nomues
  426.  
  427.                 SHR     DX,1
  428.                 RCR     AX,1
  429.                 SHR     DX,1
  430.                 RCR     AX,1
  431.                 SHR     DX,1
  432.                 RCR     AX,1
  433.                 SHR     DX,1
  434.                 RCR     AX,1
  435.  
  436.                 DIV     [Step]
  437.                 AND     DX,DX
  438.                 JZ      SHORT @@cc
  439.                  INC    AX
  440. @@cc:
  441.                 AND     AX,AX
  442.                 JNZ     @@c6
  443.  
  444. @@nomues:
  445.                 MOV     AX,[Max]
  446.  
  447.                 POP     DI
  448.                 POP     SI
  449.                 RET
  450. @@c6:
  451.                 CMP     AX,[Max]
  452.                 JC      SHORT @@c5
  453.                  MOV    AX,[Max]
  454. @@c5:
  455.  
  456.                 PUSH    AX
  457.  
  458.                 PUSH    DS
  459.                 PUSH    BP
  460.  
  461.                 LDS     SI,[ES:DI+2]
  462.                 MOV     BX,[ES:DI]
  463.                 PUSH    BX
  464.                 LES     DI,[Dest]
  465.                 LES     DI,[ES:DI]
  466.  
  467.                 MOV     CL,[Volume]
  468.                 MOV     DX,[Step]
  469.                 MOV     CH,DH
  470.                 SHR     CH,4
  471.                 SHL     DX,4
  472.                 MOV     BX,[ChanAdd]
  473.  
  474.                 POP     BP
  475.  
  476. SetBorder 63, 63, 63
  477.  
  478.                 CALL    EmptyRaw
  479.  
  480. SetBorder 0, 0, 0
  481.  
  482.                 MOV     DX,BP
  483.  
  484.                 POP     BP
  485.                 POP     DS
  486.  
  487.                 LES     BX,[Src]
  488.                 MOV     [ES:BX],DX
  489.                 MOV     [ES:BX+2],SI
  490.  
  491.                 LES     BX,[Dest]
  492.                 MOV     [ES:BX],DI
  493.  
  494.                 POP     CX
  495.  
  496.                 MOV     AX,[Max]
  497.                 SUB     AX,CX
  498.  
  499.                 POP     DI
  500.                 POP     SI
  501.                 RET
  502.  
  503. ENDP
  504.  
  505.  
  506.  
  507.  
  508. END
  509.